/*
 * JBoss, Home of Professional Open Source
 * Copyright 2011, Red Hat, Inc. and individual contributors
 * by the @authors tag. See the copyright.txt in the distribution for a
 * full listing of individual contributors.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 */

package org.mobicents.protocols.ss7.map.api.service.lsm;

import org.mobicents.protocols.ss7.map.api.primitives.CellGlobalIdOrServiceAreaIdOrLAI;
import org.mobicents.protocols.ss7.map.api.primitives.GSNAddress;
import org.mobicents.protocols.ss7.map.api.primitives.IMEI;
import org.mobicents.protocols.ss7.map.api.primitives.IMSI;
import org.mobicents.protocols.ss7.map.api.primitives.ISDNAddressString;

/**
 * 

MAP V3:

subscriberLocationReport  OPERATION ::= {				--Timer m
	ARGUMENT
		SubscriberLocationReport-Arg
	RESULT
		SubscriberLocationReport-Res
	ERRORS {
		systemFailure |
		dataMissing |
		resourceLimitation |
		unexpectedDataValue |
		unknownSubscriber |
		unauthorizedRequestingNetwork |
		unknownOrUnreachableLCSClient}
	CODE	local:86 }

SubscriberLocationReport-Arg ::= SEQUENCE {
	lcs-Event		LCS-Event,
	lcs-ClientID	LCS-ClientID, 
	lcsLocationInfo	LCSLocationInfo,
	msisdn		[0] ISDN-AddressString	OPTIONAL,
	imsi			[1] IMSI		OPTIONAL,
	imei			[2] IMEI		OPTIONAL,
	na-ESRD		[3] ISDN-AddressString	OPTIONAL,
	na-ESRK		[4] ISDN-AddressString	OPTIONAL,
	locationEstimate	[5] Ext-GeographicalInformation	OPTIONAL,
	ageOfLocationEstimate	[6] AgeOfLocationInformation	OPTIONAL,
	slr-ArgExtensionContainer	[7] SLR-ArgExtensionContainer	OPTIONAL,
	... ,
	add-LocationEstimate	[8] Add-GeographicalInformation	OPTIONAL,
	deferredmt-lrData	[9] Deferredmt-lrData	OPTIONAL, 
	lcs-ReferenceNumber	[10] LCS-ReferenceNumber	OPTIONAL,
	geranPositioningData	[11] PositioningDataInformation	OPTIONAL,
	utranPositioningData	[12] UtranPositioningDataInfo	OPTIONAL,
	cellIdOrSai	[13]	CellGlobalIdOrServiceAreaIdOrLAI	OPTIONAL,
	h-gmlc-Address	[14]	GSN-Address	OPTIONAL,
	lcsServiceTypeID	[15]	LCSServiceTypeID	OPTIONAL,
	sai-Present	[17] NULL		OPTIONAL,
	pseudonymIndicator	[18] NULL		OPTIONAL,
	accuracyFulfilmentIndicator	[19] AccuracyFulfilmentIndicator	OPTIONAL,
	velocityEstimate	[20] VelocityEstimate	OPTIONAL,
	sequenceNumber	[21] SequenceNumber	OPTIONAL,
	periodicLDRInfo	[22] PeriodicLDRInfo	OPTIONAL,
	mo-lrShortCircuitIndicator	[23] NULL		OPTIONAL,
	geranGANSSpositioningData	[24] GeranGANSSpositioningData	OPTIONAL,
	utranGANSSpositioningData	[25] UtranGANSSpositioningData	OPTIONAL,
	targetServingNodeForHandover	[26] ServingNodeAddress	OPTIONAL }

	-- one of msisdn or imsi is mandatory
	-- a location estimate that is valid for the locationEstimate parameter should 
	-- be transferred in this parameter in preference to the add-LocationEstimate.
	-- the deferredmt-lrData parameter shall be included if and only if the lcs-Event
	-- indicates a deferredmt-lrResponse.
	-- if the lcs-Event indicates a deferredmt-lrResponse then the locationEstimate 
	-- and the add-locationEstimate parameters shall not be sent if the 
	-- supportedGADShapes parameter had been received in ProvideSubscriberLocation-Arg
	-- and the shape encoded in locationEstimate or add-LocationEstimate was not marked
	-- as supported in supportedGADShapes. In such a case terminationCause 
	-- in deferredmt-lrData shall be present with value 
	-- shapeOfLocationEstimateNotSupported. 
	-- If a lcs event indicates deferred mt-lr response, the lcs-Reference number shall be 
	-- included. 
	-- sai-Present indicates that the cellIdOrSai parameter contains a Service Area Identity.

SequenceNumber ::= INTEGER (1..8639999)

 * 
 * @author amit bhayani
 * @author sergey vetyutnev
 *
 */
public interface SubscriberLocationReportRequest extends LsmMessage {
	
	public LCSEvent getLCSEvent();
	
	public LCSClientID getLCSClientID();
	
	public LCSLocationInfo getLCSLocationInfo();
	
	public ISDNAddressString getMSISDN();
	
	public IMSI getIMSI();
	
	public IMEI getIMEI();
	
	public ISDNAddressString getNaESRD();
	
	public ISDNAddressString getNaESRK();
	
	public ExtGeographicalInformation getLocationEstimate();
	
	/**
	 * AgeOfLocationInformation ::= INTEGER (0..32767)
     *    -- the value represents the elapsed time in minutes since the last
     *    -- network contact of the mobile station (i.e. the actuality of the
     *    -- location information).
     *    -- value “0” indicates that the MS is currently in contact with the
     *    -- network
     *    -- value “32767” indicates that the location information is at least
     *    -- 32767 minutes old
	 * 
	 * @return
	 */
	public Integer getAgeOfLocationEstimate();
	
	public SLRArgExtensionContainer getSLRArgExtensionContainer();
	
	/**
	 * Add-GeographicalInformation ::= OCTET STRING (SIZE (1..maxAdd-GeographicalInformation))
     *		-- Refers to geographical Information defined in 3GPP TS 23.032.
     *		-- This is composed of 1 or more octets with an internal structure according to
     *		-- 3GPP TS 23.032
     *		-- Octet 1: Type of shape, all the shapes defined in 3GPP TS 23.032 are allowed:
	 *		-- Octets 2 to n (where n is the total number of octets necessary to encode the shape
 	 *		-- according to 3GPP TS 23.032) are used to encode the shape itself in accordance with the
     *		-- encoding defined in 3GPP TS 23.032
     *		--
     *		-- An Add-GeographicalInformation parameter, whether valid or invalid, received
     *		-- together with a valid Ext-GeographicalInformation parameter in the same message
     *		-- shall be discarded.
     *		--
     *		-- An Add-GeographicalInformation parameter containing any shape not defined in
     *		-- 3GPP TS 23.032 or an incorrect number of octets or coding according to
     *		-- 3GPP TS 23.032 shall be treated as invalid data by a receiver if not received
     *		-- together with a valid Ext-GeographicalInformation parameter in the same message.
     *
     *
     * maxAdd-GeographicalInformation INTEGER ::= 91
     *		-- the maximum length allows support for all the shapes currently defined in 3GPP TS
     *		23.032
	 * 
	 * @return
	 */
	public AddGeographicalInformation getAdditionalLocationEstimate();
	
	public DeferredmtlrData getDeferredmtlrData();
	
	
	/**
	 * LCS-ReferenceNumber::= OCTET STRING (SIZE(1))
	 * 
	 * @return
	 */
	public Integer getLCSReferenceNumber();
	
	/**
	 * PositioningDataInformation ::= OCTET STRING (SIZE (2..maxPositioningDataInformation))
	 *		-- Refers to the Positioning Data defined in 3GPP TS 49.031.
     *		-- This is composed of 2 or more octets with an internal structure according to
     *		-- 3GPP TS 49.031.
     *
     * maxPositioningDataInformation INTEGER ::= 10
	 * 
	 * @return
	 */
	public PositioningDataInformation getGeranPositioningData();
	
	/**
	 * UtranPositioningDataInfo ::= OCTET STRING (SIZE (3..maxUtranPositioningDataInfo))
     *		-- Refers to the Position Data defined in 3GPP TS 25.413.
     *		-- This is composed of the positioningDataDiscriminator and the positioningDataSet
     *		-- included in positionData as defined in 3GPP TS 25.413.
     *
     * maxUtranPositioningDataInfo INTEGER ::= 11
	 * 
	 * @return
	 */
	public UtranPositioningDataInfo getUtranPositioningData();
	
	public CellGlobalIdOrServiceAreaIdOrLAI getCellGlobalIdOrServiceAreaIdOrLAI();
	
	/**
	 * GSN-Address ::= OCTET STRING (SIZE (5..17))
     *     -- Octets are coded according to TS 3GPP TS 23.003 [17]
     *     
	 * @return
	 */
	public GSNAddress getHGMLCAddress();
	
	/**
	 * LCSServiceTypeID ::= INTEGER (0..127)
     *    -- the integer values 0-63 are reserved for Standard LCS service types
     *    -- the integer values 64-127 are reserved for Non Standard LCS service types
     *
	 * @return
	 */
	public Integer getLCSServiceTypeID();

	public boolean getSaiPresent();
	
	public boolean getPseudonymIndicator();
	
	public AccuracyFulfilmentIndicator getAccuracyFulfilmentIndicator();

	public VelocityEstimate getVelocityEstimate();

	public Integer getSequenceNumber();

	public PeriodicLDRInfo getPeriodicLDRInfo();

	public boolean getMoLrShortCircuitIndicator();

	public GeranGANSSpositioningData getGeranGANSSpositioningData();

	public UtranGANSSpositioningData getUtranGANSSpositioningData();

	public ServingNodeAddress getTargetServingNodeForHandover();

}
